--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
docs/example_plugins/interface_telemetry.py ceffbbd290f7a0287aace4adfc63132c7e4df3f9 (ceffbbd2) Text, 4.74 KB
T8b949e# This is a telemetry plugin that publishes
T8b949e# connectable interfaces, similarly to the
T8b949e# interface discovery built into RNS. Using
T8b949e# telemetry-based interface publishing allows
T8b949e# private interface distribution or querying,
T8b949e# so this can be useful for networks where you
T8b949e# only want a handful of people to have access
T8b949e# to your interfaces. Interfaces published
T8b949e# using this plugin will show up in Sideband's
T8b949e# situation map.
Tff7b72import T7ee787RNS
Tff7b72class T56d364InterfaceTelemetryPluginTb4b4b4(Te6edf3SidebandTelemetryPluginTb4b4b4)Tb4b4b4:
Te6edf3plugin_name Tff7b72= Ta5d6ff"Ta5d6ffinterface_telemetryTa5d6ff"
Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# Do any initialisation work here
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffInterface telemetry plugin starting...Ta5d6ff"Tb4b4b4)
T8b949e# And finally call start on superclass
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffstopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# Do any teardown work here
Tff7b72pass
T8b949e# And finally call stop on superclass
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffupdate_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3telemeterTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3telemeter Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffinterfacesTa5d6ff" Tff7b72in Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4:
T8b949e# Create interface sensor if it is not already
T8b949e# enabled in the running telemeter instance
Te6edf3telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffinterfacesTa5d6ff"Tb4b4b4)
Te6edf3sensor Tff7b72= Te6edf3telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffinterfacesTa5d6ff"Tb4b4b4]
T8b949e# Let's add a connectable RNode interface
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffTest RNodeTa5d6ff"
Te6edf3frequency Tff7b72= T79c0ff868e6
Te6edf3bandwidth Tff7b72= T79c0ff125e3
Te6edf3codingrate Tff7b72= T79c0ff6
Te6edf3spreadingfactor Tff7b72= T79c0ff8
Te6edf3lat Tff7b72= T79c0ff41.90215
Te6edf3lon Tff7b72= T79c0ff12.45339
Te6edf3height Tff7b72= T79c0ff62.7
T8b949e# It's important to use the actual transport ID
T8b949e# of the Reticulum Transport Instance that the
T8b949e# interface is attached to. The example below
T8b949e# gets the ID from this node, but if you are
T8b949e# publishing an interface running on another
T8b949e# node, you will have to manually specify the
T8b949e# correct transport ID here.
Te6edf3transport_id Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffidentityTff7b72.Td2a8ffhashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
T8b949e# It's safe to call add_interface multiple times
T8b949e# with the same name. Doing so will update the
T8b949e# data associated with the interface.
Te6edf3sensorTff7b72.Td2a8ffadd_interfaceTb4b4b4(Tffa657typeTff7b72=Ta5d6ff"Ta5d6ffRNodeInterfaceTa5d6ff"Tb4b4b4, Te6edf3nameTff7b72=Te6edf3nameTb4b4b4, Te6edf3transport_idTff7b72=Te6edf3transport_idTb4b4b4, Te6edf3transportTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3frequencyTff7b72=Te6edf3frequencyTb4b4b4, Te6edf3bandwidthTff7b72=Te6edf3bandwidthTb4b4b4, Te6edf3codingrateTff7b72=Te6edf3codingrateTb4b4b4, Te6edf3spreadingfactorTff7b72=Te6edf3spreadingfactorTb4b4b4,
Te6edf3latTff7b72=Te6edf3latTb4b4b4, Te6edf3lonTff7b72=Te6edf3lonTb4b4b4, Te6edf3heightTff7b72=Te6edf3heightTb4b4b4)
T8b949e# Here's an example of a WeaveInterface
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffLocal UplinkTa5d6ff"
Te6edf3channel Tff7b72= T79c0ff11
Te6edf3frequency Tff7b72= T79c0ff2462e6
Te6edf3bandwidth Tff7b72= T79c0ff20e6
Te6edf3modulation Tff7b72= Ta5d6ff"Ta5d6ffw80211Ta5d6ff"
Te6edf3lat Tff7b72= T79c0ff51.99768
Te6edf3lon Tff7b72= Tff7b72-T79c0ff0.74002
Te6edf3height Tff7b72= T79c0ff12
Te6edf3sensorTff7b72.Td2a8ffadd_interfaceTb4b4b4(Tffa657typeTff7b72=Ta5d6ff"Ta5d6ffWeaveInterfaceTa5d6ff"Tb4b4b4, Te6edf3nameTff7b72=Te6edf3nameTb4b4b4, Te6edf3transport_idTff7b72=Te6edf3transport_idTb4b4b4, Te6edf3transportTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3frequencyTff7b72=Te6edf3frequencyTb4b4b4, Te6edf3bandwidthTff7b72=Te6edf3bandwidthTb4b4b4, Te6edf3channelTff7b72=Te6edf3channelTb4b4b4, Te6edf3modulationTff7b72=Te6edf3modulationTb4b4b4,
Te6edf3latTff7b72=Te6edf3latTb4b4b4, Te6edf3lonTff7b72=Te6edf3lonTb4b4b4, Te6edf3heightTff7b72=Te6edf3heightTb4b4b4)
T8b949e# Here's an example of a KISSInterface
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffUHFTa5d6ff"
Te6edf3frequency Tff7b72= T79c0ff433e6
Te6edf3modulation Tff7b72= Ta5d6ff"Ta5d6ffOFDMTa5d6ff"
Te6edf3lat Tff7b72= T79c0ff51.50839
Te6edf3lon Tff7b72= Tff7b72-T79c0ff0.07606
Te6edf3height Tff7b72= T79c0ff2.0
Te6edf3sensorTff7b72.Td2a8ffadd_interfaceTb4b4b4(Tffa657typeTff7b72=Ta5d6ff"Ta5d6ffKISSInterfaceTa5d6ff"Tb4b4b4, Te6edf3nameTff7b72=Te6edf3nameTb4b4b4, Te6edf3transport_idTff7b72=Te6edf3transport_idTb4b4b4, Te6edf3transportTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3frequencyTff7b72=Te6edf3frequencyTb4b4b4, Te6edf3modulationTff7b72=Te6edf3modulationTb4b4b4, Te6edf3latTff7b72=Te6edf3latTb4b4b4, Te6edf3lonTff7b72=Te6edf3lonTb4b4b4, Te6edf3heightTff7b72=Te6edf3heightTb4b4b4)
T8b949e# Here's an example of a BackboneInterface
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffMy NetworkTa5d6ff"
Te6edf3host Tff7b72= Ta5d6ff"Ta5d6ffrns.my.networkTa5d6ff"
Te6edf3port Tff7b72= T79c0ff4242
Te6edf3ifac_netname Tff7b72= Ta5d6ff"Ta5d6ffmy_networkTa5d6ff"
Te6edf3ifac_netkey Tff7b72= Ta5d6ff"Ta5d6ffthe_secretTa5d6ff"
Te6edf3lat Tff7b72= T79c0ff29.97251
Te6edf3lon Tff7b72= T79c0ff31.12828
Te6edf3height Tff7b72= T79c0ff72
Te6edf3sensorTff7b72.Td2a8ffadd_interfaceTb4b4b4(Tffa657typeTff7b72=Ta5d6ff"Ta5d6ffBackboneInterfaceTa5d6ff"Tb4b4b4, Te6edf3nameTff7b72=Te6edf3nameTb4b4b4, Te6edf3transport_idTff7b72=Te6edf3transport_idTb4b4b4, Te6edf3transportTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3reachable_onTff7b72=Te6edf3hostTb4b4b4, Te6edf3portTff7b72=Te6edf3portTb4b4b4, Te6edf3latTff7b72=Te6edf3latTb4b4b4, Te6edf3lonTff7b72=Te6edf3lonTb4b4b4, Te6edf3heightTff7b72=Te6edf3heightTb4b4b4,
Te6edf3ifac_netnameTff7b72=Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkeyTff7b72=Te6edf3ifac_netkeyTb4b4b4)
T8b949e# That's it, the interfaces will now show up on
T8b949e# the map of instances that can receive the
T8b949e# telemetry.
T8b949e# Finally, tell Sideband what class in this
T8b949e# file is the actual plugin class.
Te6edf3plugin_class Tff7b72= Te6edf3InterfaceTelemetryPlugin
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────